package cn.silver.framework.mybatis.service;

import cn.hutool.core.lang.tree.Tree;
import cn.silver.framework.mybatis.bean.TreeBean;
import cn.silver.framework.mybatis.domain.TreeEntity;
import cn.silver.framework.mybatis.param.TreeParam;
import cn.silver.framework.web.model.TreeResult;
import com.baomidou.mybatisplus.core.conditions.Wrapper;

import java.util.List;

/**
 * 树结构数据查询服务接口
 *
 * @author Silver Zhou
 */
public interface ITreeService<T extends TreeEntity, P extends TreeParam, V extends TreeBean> extends IBusService<T, P, V> {
    /**
     * 查询树结构数据
     *
     * @param param 查询条件
     * @return 构建的树结构数据
     */
    List<V> selectTree(P param);

    /**
     * 查询树结构数据
     *
     * @param wrapper 查询条件
     * @return 构建的树结构数据
     */
    List<V> selectTree(Wrapper<T> wrapper);

    /**
     * 将数据构建为树结构数据
     *
     * @param models 待构建的数据集
     * @return 构建的树结构数据
     */
    List<Tree<String>> buildTreeSelect(List<V> models);

    TreeResult getTreeSelect(P param);

}
